package com.xbts.system.domain;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.xbts.common.enums.ShoppingCarEnums;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.Data;

import java.util.Objects;

import com.xbts.common.utils.StringUtils;
import org.springframework.format.annotation.DateTimeFormat;

/**
 * 合同管理对象 cn_contract_manager
 *
 * @author xbts
 * @date 2023-08-29
 */
@Data
@ApiModel("合同管理对象")
@TableName("cn_contract_manager")
public class CnContractManager implements Serializable {

    private static final long serialVersionUID=1L;

    /** 主键 */
    @TableId
    @JsonSerialize(using= ToStringSerializer.class)
    private Long id;

    /** 用户id */
    @ApiModelProperty("用户id")
    private Long userId;

    /** 合同日期 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty("合同日期")
    private Date contractDate;

    /** 合同金额 */
    @ApiModelProperty("合同金额")
    private BigDecimal contractAmount;

    /** 合同经手人 */
    @ApiModelProperty("合同经手人")
    private String handledBy;

    /** 合同状态 -1已删除 status=0 待开票，status=1 开票中，status=2 已开票 3拒绝  */
    @ApiModelProperty("合同状态")
    private String contractStatus;

    /** 用户地址 */
    @ApiModelProperty("用户地址")
    private String userAddress;

    /** 用户联系电话 */
    @ApiModelProperty("用户联系电话")
    private String userContactPhone;

    /** 用户姓名 */
    @ApiModelProperty("用户姓名")
    private String userName;

    /** 用户开户银行 */
    @ApiModelProperty("用户开户银行")
    private String userBankOfDeposit;

    /** 用户银行账号 */
    @ApiModelProperty("用户银行账号")
    private String userAccountNumber;

    /** 纳税人识别编号 */
    @ApiModelProperty("纳税人识别编号")
    private String userTaxpayerNumber;

    /** 公司地址 */
    @ApiModelProperty("公司地址")
    private String companyAddress;

    /** 公司联系电话 */
    @ApiModelProperty("公司联系电话")
    private String companyContactPhone;

    /** 公司联系人姓名 */
    @ApiModelProperty("公司联系人姓名")
    private String companyName;

    /** 公司银行账号 */
    @ApiModelProperty("公司银行账号")
    private String companyAccountNumber;

    /** 附件地址 */
    @ApiModelProperty("附件地址")
    private String attachment;

    /** 是否是草稿（0不是草稿 1是草稿） */
    @ApiModelProperty("是否是草稿")
    private Boolean draft;

    /** 是否作废（0不作废 1作废） */
    @ApiModelProperty("是否作废")
    private Boolean cancel;

    private String orderItemId;
    private String orderItemSn;
    /** 购物车类型(CLOUD_SERVER云服务器 MARKET_CLOUD市场云 GOV_CLOUD政务云) */
    @ApiModelProperty("购物车类型(CLOUD_SERVER云服务器 MARKET_CLOUD市场云 GOV_CLOUD政务云)")
    private ShoppingCarEnums shoppingCarEnums;


    /** 创建者 */
    private String createBy;

    /** 创建时间 */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    /** 更新者 */
    private String updateBy;

    /** 更新时间 */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;

    private String remark;

    public<T> QueryWrapper<T> queryWrapper(){
        QueryWrapper<T> queryWrapper=new QueryWrapper<>();
        queryWrapper.eq(!Objects.isNull(contractDate),"contract_date",contractDate);
        queryWrapper.like(StringUtils.isNotEmpty(handledBy),"handled_by",handledBy);
        queryWrapper.like(StringUtils.isNotEmpty(contractStatus),"contract_status",contractStatus);
        queryWrapper.like(StringUtils.isNotEmpty(userAddress),"user_address",userAddress);
        queryWrapper.like(StringUtils.isNotEmpty(userContactPhone),"user_contact_phone",userContactPhone);
        queryWrapper.like(StringUtils.isNotEmpty(userName),"user_name",userName);
        queryWrapper.like(StringUtils.isNotEmpty(userBankOfDeposit),"user_bank_of_deposit",userBankOfDeposit);
        queryWrapper.like(StringUtils.isNotEmpty(userAccountNumber),"user_account_number",userAccountNumber);
        queryWrapper.like(StringUtils.isNotEmpty(userTaxpayerNumber),"user_taxpayer_number",userTaxpayerNumber);
        queryWrapper.like(StringUtils.isNotEmpty(companyAddress),"company_address",companyAddress);
        queryWrapper.like(StringUtils.isNotEmpty(companyContactPhone),"company_contact_phone",companyContactPhone);
        queryWrapper.like(StringUtils.isNotEmpty(companyName),"company_name",companyName);
        queryWrapper.like(StringUtils.isNotEmpty(companyAccountNumber),"company_account_number",companyAccountNumber);
        return queryWrapper;
    }
}